package com.meida.module.user.provider.service;

import com.meida.common.mybatis.base.service.IBaseService;
import com.meida.common.base.entity.EntityMap;
import com.meida.common.mybatis.model.ResultBody;
import com.meida.common.security.OpenUser;
import com.meida.module.user.client.entity.AppUser;

import java.util.List;
import java.util.Map;

/**
 * 系统用户资料管理
 *
 * @author: zyf
 * @date: 2018/10/24 16:38
 * @description:
 */
public interface AppUserService extends IBaseService<AppUser> {


    /**
     * 根据用户ID获取用户信息
     *
     * @param userId
     * @return
     */
    AppUser getUserById(Long userId);


    AppUser getUserByShareCode(String shareCode);


    /**
     * 获取当前用户详细信息
     *
     * @param params
     * @return
     */
    ResultBody getMineInfo(Map params);


    List<EntityMap> selectUsers(String userIds);


    /**
     * 登录初始化
     *
     * @param map
     * @return
     */
    ResultBody userInit(Map map);

    /**
     * 依据登录名查询系统用户信息
     *
     * @param username
     * @return
     */
    AppUser getUserByUsername(String username);


    void registerByMobile(String accountName, String password, String userType);

    /**
     * 依据手机号查询用户
     *
     * @param mobile
     * @return
     */
    AppUser getUserByMobile(String mobile);

    /**
     * 更新当前用户
     *
     * @param params
     */
    ResultBody updateMineInfo(Map params);




    /**
     * 绑定手机号
     */
    ResultBody<AppUser> bingMobile(String mobile, String smsCode, String password, String userType);

    /**
     * 换绑手机号
     */
    ResultBody<Boolean> changeMobile(Long userId, String mobile, String smsCode);

    /**
     * 用户收藏关注
     */
    ResultBody setStatus(Long userId);


    /**
     * 用户绑定企业
     *
     * @param openUser
     */
    void bindCompany(OpenUser openUser);

    /**
     * 清空用户企业ID
     *
     * @param companyId
     */
    void unBindCompany(Long companyId);

    /**
     * 保存用户
     */
    AppUser save(String usreName, String mobile, Long companyId);

    /**
     * 添加用户
     *
     * @return
     */
    ResultBody saveUser(Map model);

    /**
     * 统计被邀请用户
     *
     * @param userId
     * @return
     */
    Integer countByInviterId(Long userId);

    /**
     * 统计每月会员新增数量
     */
    ResultBody totalUserGroupMonth(Map params);

}
